package FanXingT;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

/**
 * @author Ajie
 * @date 5/15/21
 * @function 拿到泛型，实际应用。
 */
public class GetT_Gson {
    public static void main(String[] args) {

        //样例：
        String jsonData = "{\"1\":\"怪盗kidou\"}";
        java.lang.reflect.Type type = new TypeToken<HashMap<Integer, String>>() {}.getType();//获得 签名信息，实际类型。
        Map<Integer, String> map2 = new Gson().fromJson(jsonData, type);

//        1.type:
        //1. public class TypeToken<T> {
        //protected TypeToken() {
        //2.
        //    this.type = getSuperclassTypeParameter(getClass());
        //    this.rawType = (Class<? super T>) $Gson$Types.getRawType(type);
        //    this.hashCode = type.hashCode();
        //  }
        //
        // 3.
        //  /**
        //   * Returns the type from super class's type parameter in {@link $Gson$Types#canonicalize
        //   * canonical form}.
        //   */
        //  static Type getSuperclassTypeParameter(Class<?> subclass) {
        //    Type superclass = subclass.getGenericSuperclass();
        //    if (superclass instanceof Class) {
        //      throw new RuntimeException("Missing type parameter.");
        //    }
        //    ParameterizedType parameterized = (ParameterizedType) superclass;
        //    return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);
        //  }
        // final Type type;
        //  public static Type canonicalize(Type type) {
        //    if (type instanceof Class) {
        //      Class<?> c = (Class<?>) type;
        //      return c.isArray() ? new GenericArrayTypeImpl(canonicalize(c.getComponentType())) : c;
        //
        //    }
        System.out.println(map2);
    }

    @Test
    public void retrofitTest(){
        //Retrofit 获得method 中泛型信息。
//      Method[] methods = base.getClass().getMethods();
//      Method[] methods = base.getClass().getDeclaredMethods();
    }
}


